স্প্রিং বুটে RestTemplate
কনফিগার করার সময় টাইমআউট এবং এক্সসেপশন হ্যান্ডলিং যুক্ত করার জন্য কাস্টম কনফিগারেশন প্রয়োজন। নিচে এই কনফিগারেশন এবং হ্যান্ডলিংয়ের উদাহরণ তুলে ধরা হলো:
RestTemplate
-এর জন্য টাইমআউট কনফিগার করার সময় HttpComponentsClientHttpRequestFactory
ব্যবহার করা হয়। এটি কানেকশন টাইমআউট এবং রিড টাইমআউট সেট করার জন্য ব্যবহৃত হয়।
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.time.Duration;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
// Set connection timeout (milliseconds)
factory.setConnectTimeout(5000);
// Set read timeout (milliseconds)
factory.setReadTimeout(5000);
return new RestTemplate(factory);
}
}
পুলিং কানেকশন ব্যবহারের মাধ্যমে টাইমআউট এবং কার্যকারিতা উন্নত করা যায়:
@Bean
public RestTemplate restTemplateWithPooling() {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(100); // সর্বোচ্চ ১০০ কানেকশন
connectionManager.setDefaultMaxPerRoute(20); // প্রতি রাউটে সর্বোচ্চ ২০ কানেকশন
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(connectionManager)
.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
factory.setConnectTimeout(5000); // কানেকশন টাইমআউট
factory.setReadTimeout(5000); // রিড টাইমআউট
return new RestTemplate(factory);
}
REST API কল করার সময় ত্রুটি হ্যান্ডল করার জন্য RestTemplate
-এ কাস্টম ResponseErrorHandler
ব্যবহার করা যায়। এটি ত্রুটিপূর্ণ HTTP রেসপন্স হ্যান্ডল করতে ব্যবহৃত হয়।
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
public class CustomResponseErrorHandler extends DefaultResponseErrorHandler {
@Override
public void handleError(ClientHttpResponse response) throws IOException {
// Custom error handling logic
if (response.getStatusCode().is4xxClientError()) {
throw new RestClientException("Client Error: " + response.getStatusCode());
} else if (response.getStatusCode().is5xxServerError()) {
throw new RestClientException("Server Error: " + response.getStatusCode());
} else {
super.handleError(response);
}
}
}
এই কাস্টম হ্যান্ডলার RestTemplate
-এ যুক্ত করুন:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new CustomResponseErrorHandler());
return restTemplate;
}
আপনার অ্যাপ্লিকেশনের সব REST কলের জন্য @ControllerAdvice
ব্যবহার করে গ্লোবাল এক্সসেপশন হ্যান্ডল করতে পারেন:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RestClientException.class)
public ResponseEntity<String> handleRestClientException(RestClientException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Error: " + ex.getMessage());
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGeneralException(Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred: " + ex.getMessage());
}
}
কাস্টম টাইমআউট এবং এক্সসেপশন হ্যান্ডলিংসহ RestTemplate কনফিগার:
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(5000); // কানেকশন টাইমআউট
factory.setReadTimeout(5000); // রিড টাইমআউট
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.setErrorHandler(new CustomResponseErrorHandler());
return restTemplate;
}
}
এইভাবে আপনি RestTemplate
-এর জন্য টাইমআউট এবং এক্সসেপশন হ্যান্ডলিং কনফিগার করতে পারবেন। এটি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং রিলায়েবল করবে।
Read more